/**
 *
 */
package fr.miage.orleans.aar.ejb;

import java.util.Collection;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import fr.miage.orleans.aar.modele.Equipe;
import fr.miage.orleans.aar.modele.EquipeTournoi;
import fr.miage.orleans.aar.modele.Joueur;
import fr.miage.orleans.aar.modele.PosteJoueur;
import fr.miage.orleans.aar.modele.Tournoi;


/**
 * @author Steve Cancès <steve.cances@gmail.com>
 *
 */
@Stateless
@LocalBean
public class FacadeBean implements FacadeLocal {

    @PersistenceContext(unitName = FacadeUtils.PERSISTENCE_CONTEXT_UNIT_NAME)
    private EntityManager entityManager;

    @EJB
    private FacadeGettersBean facadeGetters;

    @Override
    public void inscriptionTournoi(int equipeId, int tournoiId) {        
        Tournoi tournoi = this.facadeGetters.getTournoiById(tournoiId);
        Equipe equipe = this.facadeGetters.getEquipeById(equipeId);
        if (tournoi != null && equipe != null) {
            EquipeTournoi equipeTournoi = new EquipeTournoi();
            equipeTournoi.setEquipe(equipe);
            equipeTournoi.setTournoi(tournoi);
            this.entityManager.persist(equipeTournoi);
        }
    }

    @Override
    public Joueur createJoueur(String nom, String prenom, PosteJoueur posteJoueur) {
        Joueur joueur = null;
        if (nom != null && prenom != null && posteJoueur != null && !nom.isEmpty() && !prenom.isEmpty()) {
            joueur = new Joueur();
            joueur.setNom(nom);
            joueur.setPrenom(prenom);
            PosteJoueur posteJoueurMerged = this.entityManager.merge(posteJoueur);
            joueur.setPosteJoueur(posteJoueurMerged);
            this.entityManager.persist(joueur);
        }
        return joueur;
    }

    @Override
    public Equipe createEquipe(String nomEquipe) {
        if (nomEquipe != null && !nomEquipe.isEmpty()) {
            Equipe equipe = new Equipe();
            equipe.setNom(nomEquipe);
            try {
                this.entityManager.persist(equipe);
                return equipe;
            } catch (Exception exception) {
            }
        }
        return null;
    }

    @Override
    public Equipe addJoueurToEquipe(int idEquipe, int idJoueur) {
        Equipe equipe = this.facadeGetters.getEquipeById(idEquipe);
        Joueur joueur = this.facadeGetters.getJoueurById(idJoueur);
        if (joueur != null && equipe != null) {
            joueur.setEquipe(equipe);
            equipe.getJoueurs().add(joueur);
            try {
                this.entityManager.flush();
                return equipe;
            } catch (Exception e) {
            }
        }
        return null;
    }

    @Override
    public Equipe addJoueursToEquipe(Equipe equipe, Collection<Joueur> joueurs) {
        try {
            Equipe equipeMerged = this.entityManager.merge(equipe);
            for (Joueur joueur : joueurs) {
                Joueur joueurMerged = this.entityManager.merge(joueur);
                joueurMerged.setEquipe(equipeMerged);
                equipeMerged.getJoueurs().add(joueurMerged);
            }
            this.entityManager.flush();
            return equipeMerged;
        } catch (Exception e) {
        }
        return null;
    }
}
